package com.xiaoqi.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xiaoqi.constant.MessageConstant;
import com.xiaoqi.dao.CheckGroupDao;
import com.xiaoqi.exception.SunnydayException;
import com.xiaoqi.pojo.CheckGroup;
import com.xiaoqi.pojo.PageResult;
import com.xiaoqi.pojo.QueryPageBean;
import com.xiaoqi.service.CheckGroupService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;


import java.util.List;


@Service(interfaceClass = CheckGroupService.class)//注入ioc中并且暴露接口
@Transactional
public class CheckGroupServiceimpl implements CheckGroupService {

    @Autowired
    private CheckGroupDao checkGroupDao;

    @Override
    public List<CheckGroup> findAll() {
        return checkGroupDao.findAll();
    }

    /**
     * 查询所有检查组
     *
     * @return
     */
    @Override
    public PageResult findPage(QueryPageBean queryPageBean) {

        //开启分页查询，开始后的第一条查询语句会被分页
        PageHelper.startPage(queryPageBean.getCurrentPage(), queryPageBean.getPageSize());
        //该查询语句会被分页
        List<CheckGroup> CheckGroupList = checkGroupDao.findPage(queryPageBean.getQueryString());
        //获取更多分页信息
        PageInfo<CheckGroup> pageInfo = new PageInfo<>(CheckGroupList);

        return new PageResult(pageInfo.getTotal(), pageInfo.getList());
    }

    /**
     * 新增检查项
     * @param checkGroup
     */
    @Override
    public void addCheckGroup(CheckGroup checkGroup, Integer[] checkitemIds) {
        //增加检查组
        checkGroupDao.addCheckGroup(checkGroup);
        //获取增加后的自增id
        Integer checkGroupId = checkGroup.getId();
//       将检查组关联检查项的中间表数据插入
        for (Integer checkitemId : checkitemIds) {
            checkGroupDao.addCheckGroup_CheckItem(checkGroupId, checkitemId);
        }
    }

    /**
     * 根据条件"id"查询检查组
     * @return
     */
    @Override
    public CheckGroup findById(Integer id) {
        return checkGroupDao.findById(id);
    }

    /**
     * 根据条件检查组"id"查询检查组关联的检查项ids
     * @return
     */
    @Override
    public List<Integer> findCheckGroup_CheckItemById(Integer id) {
        return checkGroupDao.findCheckGroup_CheckItemById(id);
    }

    /**
     * 根据条件检查组"id"修改检查组信息
     * @return
     */
    @Override
    public void update(CheckGroup checkGroup,Integer[] checkitemIds) {
        //更改检查组信息
        checkGroupDao.update(checkGroup);
        //先删除之前关联的检查项
        checkGroupDao.delCheckGroup_CheckItem(checkGroup.getId());
        //添加新关联的检查项
        if (checkitemIds.length>0){
            for (Integer checkitemId : checkitemIds) {
                checkGroupDao.addCheckGroup_CheckItem(checkGroup.getId(), checkitemId);
            }
        }
    }

    /**
     * 根据条件检查组"id"删除检查组
     * @param id
     */
    @Override
    public void delCheckGroup(Integer id) {
        //先查询检查组是否被套餐关联
        Integer count = checkGroupDao.findSetMeal_CheckGroupByid(id);
        if (count>0){
            //有关联抛出异常
            throw new SunnydayException(MessageConstant.CHECKGROUP_IN_SETMEAL);
        }
        //删除该检查组和所有检查项的关联
        checkGroupDao.delCheckGroup_CheckItem(id);
        //删除检查组
        checkGroupDao.delCheckGroup(id);
    }


}
